package q2006_countKDifference;

public class Solution {
    /*
    仍然是hash表的经典题
    只是此时好数对变成了需要有指定差值的数对
    所以我们仍然可以用map来实现
    首先 每当我们遍历到一个数时，就将其num - k 和 num + k存储到map中 如果之后的数出现了这个key
    也就代表着此时的数 与 之前我们记录的数恰好差值为k 那么就ans += map.get
     */
    public int countKDifference(int[] nums, int k) {
//        Map<Integer, Integer> map = new HashMap<>();
//        int ans = 0;
//        for (int num : nums) {
//            if (map.containsKey(num)) ans += map.get(num);
//
//            map.put(num + k, map.getOrDefault(num + k, 0) + 1);
//            map.put(num - k, map.getOrDefault(num - k, 0) + 1);
//        }
//
//        return ans;

        int[] map = new int[201];
        int ans = 0;
        for (int num : nums) {
            ans += map[num];
            map[num + k]++;
            if (num - k >= 0) map[num - k]++;
        }

        return ans;
    }
}
